package utils

import (
	"math/rand"
	"strings"
	"time"
)

var nums = []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}

var chars = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
	"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
	"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}

// _randomSeed 保证每次生成的随机数不同
func _randomSeed() {
	rand.Seed(time.Now().UnixNano())
}

// RandomStrAndNum 全字符匹配的指定长度字符串
func RandomStrAndNum(numLen int) string {
	return builder(numLen, len(chars))
}

// RandomStr 仅字母的指定长度的字符串
func RandomStr(numLen int) string {
	return builder(numLen, 52)
}

// RandomNum 获取指定长度的纯数字随机串
func RandomNum(numLen int) string {
	_randomSeed()
	str := strings.Builder{}
	for i := 0; i < numLen; i++ {
		str.WriteString(nums[rand.Intn(10)])
	}
	return str.String()
}

func builder(numLen int, charLen int) string {
	_randomSeed()
	str := strings.Builder{}
	for i := 0; i < numLen; i++ {
		str.WriteString(chars[rand.Intn(charLen)])
	}
	return str.String()
}
